Fixed Actions.
[f432xdd.git] / java / Graph Editor / src / interfaces / GraphFrame.java
blob1951826037e5a5a7ffdb314748fc4f6cc8099bb5
1 package interfaces;
3 import models.*;
4 import controllers.SelectionController;
5 import controllers.actions.*;
6 import java.awt.Event;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.KeyEvent;
10 import java.io.File;
12 import javax.swing.*;
13 import javax.swing.undo.*;
16 public class GraphFrame extends JFrame {
17 private static final long serialVersionUID = -7929100929760152271L;
18 private GraphPanel panel;
19 private UndoManager undoManager;
21 private JMenuBar menubar;
22 private JMenu menuOptionFile;
23 private JMenu menuOptionEdit;
25 private JMenuItem menuOptionFileClose;
26 private JMenuItem menuOptionFileOpen;
27 private SelectionController selectionController;
28 private ActionListener onMenuFileClose;
29 private ActionListener onMenuFileOpen;
31 private JMenuItem menuOptionEditUndo;
32 private JMenuItem menuOptionsEditRedo;
33 private JMenuItem menuOptionEditAddNode;
34 private JMenuItem menuOptionEditAddEdge;
35 private JMenuItem menuOptionEditRemoveNode;
36 private JMenuItem menuOptionFileSave;
38 private ActionListener onMenuFileSave;
39 private ActionListener onMenuEditUndo;
40 private ActionListener onMenuEditRedo;
41 private ActionListener onMenuEditAddNode;
42 private ActionListener onMenuEditAddEdge;
43 private ActionListener onMenuEditDeleteNode;
45 public GraphFrame(GraphModel model){
47 this.setTitle("Graph Editor");
48 this.setSize(500, 500);
49 menubar = new JMenuBar();
50 this.setFocusable(true);
52 menuOptionFile = new JMenu("File");
53 menuOptionFile.setMnemonic(KeyEvent.VK_F);
54 menuOptionEdit = new JMenu("Edit");
55 menuOptionEdit.setMnemonic(KeyEvent.VK_E);
57 menuOptionFileClose = new JMenuItem("Close program",KeyEvent.VK_C);
58 menuOptionFileClose.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E, Event.CTRL_MASK));
60 menuOptionFileOpen = new JMenuItem("Openen",KeyEvent.VK_O);
61 menuOptionFileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK));
63 menuOptionEditUndo = new JMenuItem("Ongedaan maken",KeyEvent.VK_Z);
64 menuOptionEditUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, Event.CTRL_MASK));
66 menuOptionEditAddNode = new JMenuItem("Knoop toevoegen",KeyEvent.VK_N);
67 menuOptionEditAddNode.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Event.CTRL_MASK));
69 menuOptionEditAddEdge = new JMenuItem("Kant toevoegen",KeyEvent.VK_M);
70 menuOptionEditAddEdge.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, Event.CTRL_MASK));
72 menuOptionEditRemoveNode = new JMenuItem("Delete Node",KeyEvent.VK_D);
73 menuOptionEditRemoveNode.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,Event.SHIFT_MASK));
75 menuOptionsEditRedo = new JMenuItem("Herhalen",KeyEvent.VK_R);
76 menuOptionsEditRedo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,Event.CTRL_MASK));
78 menuOptionFileSave = new JMenuItem("Opslaan",KeyEvent.VK_S);
79 menuOptionFileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,Event.CTRL_MASK));
81 onMenuFileSave = new ActionListener(){
82 public void actionPerformed(ActionEvent arg0) {
83 saveFile();
88 onMenuFileClose = new ActionListener(){
89 public void actionPerformed(ActionEvent arg0) {
90 System.exit(0); // TODO Werkt niet goed?
93 onMenuFileOpen = new ActionListener(){
94 public void actionPerformed(ActionEvent arg0) {
95 openFile();
98 onMenuEditUndo = new ActionListener(){
99 public void actionPerformed(ActionEvent arg0) {
100 undoManager.undo();
101 notifyUndoManagerChanged();
104 onMenuEditAddNode = new ActionListener(){
105 public void actionPerformed(ActionEvent arg0) {
106 GraphFrame.this.undoManager.addEdit(new AddNode(GraphFrame.this.selectionController));
107 notifyUndoManagerChanged();
110 onMenuEditAddEdge = new ActionListener(){
111 public void actionPerformed(ActionEvent arg0) {
112 selectionController.doAddEdge();
113 notifyUndoManagerChanged();
117 onMenuEditDeleteNode = new ActionListener(){
118 public void actionPerformed(ActionEvent arg0){
119 undoManager.addEdit(new DeleteNode(selectionController));
120 notifyUndoManagerChanged();
123 onMenuEditRedo = new ActionListener(){
124 public void actionPerformed(ActionEvent arg0){
125 undoManager.redo();
126 notifyUndoManagerChanged();
130 menuOptionFileClose.addActionListener(onMenuFileClose);
131 menuOptionEditAddNode.addActionListener(onMenuEditAddNode);
132 menuOptionEditAddEdge.addActionListener(onMenuEditAddEdge);
133 menuOptionEditUndo.addActionListener(onMenuEditUndo);
134 menuOptionFileOpen.addActionListener(onMenuFileOpen);
135 menuOptionEditRemoveNode.addActionListener(onMenuEditDeleteNode);
136 menuOptionsEditRedo.addActionListener(onMenuEditRedo);
137 menuOptionFileSave.addActionListener(onMenuFileSave);
139 menuOptionFile.add(menuOptionFileOpen);
140 menuOptionFile.add(menuOptionFileSave);
141 menuOptionFile.addSeparator();
142 menuOptionFile.add(menuOptionFileClose);
144 menuOptionEdit.add(menuOptionEditAddNode);
145 menuOptionEdit.add(menuOptionEditAddEdge);
146 menuOptionEdit.addSeparator();
147 menuOptionEdit.add(menuOptionEditUndo);
148 menuOptionEdit.add(menuOptionsEditRedo);
149 menuOptionEdit.add(menuOptionEditRemoveNode);
151 menubar.add(menuOptionFile);
152 menubar.add(menuOptionEdit);
153 setJMenuBar(menubar);
155 panel = new GraphPanel(model);
156 add(panel);
157 undoManager = new UndoManager();
158 this.notifyUndoManagerChanged();
160 setVisible(true);
163 private void openFile()
165 final JFileChooser fc = new JFileChooser();
166 int returnVal = fc.showOpenDialog(this);
167 if(returnVal == JFileChooser.APPROVE_OPTION){
168 doOpenFile(fc.getSelectedFile());
172 private void notifyUndoManagerChanged(){
173 menuOptionsEditRedo.setEnabled(undoManager.canRedo());
174 menuOptionEditUndo.setEnabled(undoManager.canUndo());
176 menuOptionsEditRedo.setText(this.undoManager.getRedoPresentationName());
177 menuOptionEditUndo.setText(this.undoManager.getUndoPresentationName());
181 private void doOpenFile(File f) {
182 try {
183 GraphModel model = GraphModel.fromFile(f);
184 panel.setModel(model);
185 this.undoManager.discardAllEdits();
186 notifyUndoManagerChanged();
187 } catch (Exception e) {
188 JOptionPane
189 .showMessageDialog(
190 this,
191 "An error occured trying to read the input file. \r\n" + e
192 .getMessage(), "Error",
193 JOptionPane.ERROR_MESSAGE);
197 private void saveFile()
199 final JFileChooser fc = new JFileChooser();
200 int returnVal = fc.showSaveDialog(this);
201 if(returnVal == JFileChooser.APPROVE_OPTION){
202 File file = fc.getSelectedFile();
203 try{
204 panel.getModel().writeToFile(file);
205 }catch(Exception e){
206 JOptionPane.showMessageDialog(this, (String)("An error occured trying to save the current state to a file. \r\n" + e.getMessage()) , "Error",JOptionPane.ERROR_MESSAGE );
211 public void addAction(UndoableEdit action){
212 undoManager.addEdit(action);
213 notifyUndoManagerChanged();
216 public void selectedObject(boolean selected) {
217 menuOptionEditAddEdge.setEnabled(selected);
218 menuOptionEditRemoveNode.setEnabled(selected);
221 public void setSelectionController(SelectionController s) {
222 selectionController = s;
223 this.getPanel().setSelectionController(s);
225 public GraphPanel getPanel()
227 return panel;